\chapter{Lista dei requisiti}
In questo capitolo sono elencati i requisiti individuati tramite l'analisi posta in atto. Alcuni di essi sono stati individuati grazie alla descrizione generale, altri tramite i diagrammi use-case. I requisiti verranno di seguito suddivisi in tre gruppi distinguendo tra requisiti \textit{essenziali}, quelli sui quali va concentrato il maggior sforzo, ossia quelli ritenuti necessari al completamento del software. A seguire verranno elencati i requisiti \textit{opzionali}, quelli cioè non strettamente necessari. Infine verranno elencati i requisiti \textit{desiderabili}, ossia tutti quei requisiti che attualmente non meritano una priorità elevata, ma che comunque si vorrebbe prendere in considerazione e inserire nel software in futuro.\\
 \\
Ogni requisito è caratterizzato da un ID univoco, una descrizione e una serie di keyword atte a descrivere ulteriormente il requisito stesso (funzionale piuttosto che qualitativo) e la sua provenienza (verbale piuttosto che use-case).\\

\section{Essenziali}
\begin{itemize}
\item[A1] Il software deve permettere l'apertura la modifica e il salvataggio di file in formato testo.\\ \F, \UC
%A2 Deprecato, sintetizzato in A6
\item[A3] Il software deve supportare singolarmente anche \textit{xml schema} e \textit{dtd}. Deve perciò essere possibile aprire, modificare e salvare file di questo tipo. Deve essere inoltre presente un evidenziazione di sintassi per questi file e in generale (quando ciò ha senso) per ogni funzionalità dell'IDE deve essere sviluppato un adattamento di quella funzionalità a questi linguaggi.\\ \F, \RM
\item[A4] Il software deve inoltre supportare l'utilizzo dei seguenti linguaggi legati a xml:  \textit{xslt} (1.0 e 2.0), \textit{xquery} (tutte le versioni), \textit{xpath} (tutte le versioni). Deve perciò essere possibile aprire, modificare, salvare ed eseguire file di questo tipo. Deve essere inoltre presente un evidenziazione di sintassi per questi file e in generale (quando ciò ha senso) per ogni funzionalità dell'IDE deve essere sviluppato un adattamento di quella funzionalità a questi linguaggi.\\ \F, \RM
\item[A5] Il software deve essere dotato di una \textit{GUI} che permetta di usufruire di tutte le funzionalità del software stesso.\\ \U, \RM
\item[A6] Deve essere possibile validare un documento xml secondo un dato xml schema o un dato dtd.\\ \Q, \RM
\item[A7] Il software deve individuare un errore sintattico in modo dettagliato all'interno di un documento.\\ \U, \RM
\item[A8] Il software deve essere open source, ossia garantire l'accessibilità del sorgente a tutti. \\ \Q, \RM
\item[A9] Il software deve essere free, con la possibilità di ricevere delle donazioni.\\ \Q, \RM
\item[A10] Il software deve essere dotato di una modalità console nella quale sia possibile validare xml ed eseguire xquery, xpath, xslt.\\ \U, \RM
\item[A11] Nella modifica e creazione dei file xml deve essere possibile cambiare in modo veloce la modalità di visualizzazione alternandola tra \textit{visualizzazione normale} e \textit{visualizzazione DOM} nella quale ad ogni nodo è affiancato un bottone che permette di espandere o comprimere la lista dei nodi figlio.\\ \U, \RM
\item[A12] Deve essere disponibile una modalità normale e una modalità DOM anche per xml schema e xslt.\\ \U, \RM
\item[A13] Il software deve prevedere un'evidenziazione di sintassi per ogni linguaggio supportato.\\ \U, \RM
\item[A14] Deve essere possibile abilitare un autocompletamento per il tag che si sta scrivendo. Il software deve mostrare un elenco dei tag possibili basandosi sui precedenti tag scritti nello stesso documento/progetto.\\ \F, \U, \RM
\item[A15] Deve essere possibile disabilitare le funzioni di autocompletamento.\\ \U, \RM
\item[A16] Se presente un xml schema o un dtd il software deve costruire l'elenco dei possibili tag basandosi anche su queste informazioni.\\ \F, \RM
\item[A17] Deve essere possibile decidere dopo quanti caratteri attivare il suggerimento di autocompletamento automatico.\\ \U, \RM
\item[A18] Deve essere possibile definire con quale tasto viene attivato il completamento automatico.\\ \U, \DR
\item[A19] Deve essere posibile abilitare/disabilitare un autochiusura dei tag. Al termine della scrittura di un tag o al termine del suo autocompletamento viene scritto automaticamente anche il tag di chiusura corrispondente.\\ \F, \U, \RM
\item[A20] Se l'xml viene accompagnato da un xml schema o da un dtd deve essere possibile abilitare un autocompletamento/suggerimento per gli attributi di ogni elemento.\\ \U, \RM
\item[A21] Per ogni linguaggio deve essere possibile abilitare/disabilitare una funzione di autocompletamento che fornisca un suggerimento delle possibili keyword da inserire.\\ \U, \RM
\item[A22] Deve essere possibile eseguire un file \textit{xquery} su un file \textit{xml}.\\ \F, \RM
\item[A23] Deve essere possibile eseguire un file \textit{xpath} su un file \textit{xml}.\\ \F, \RM
%A24 Deprecato
\item[A25] L'utente deve poter decidere se in presenza di un solo suggerimento l'autocompletamento debba inserire direttamente il codice invece di mostrare un unico suggerimento.\\ \F, \U, \RM
\item[A26] Deve essere possibile visualizzare o nascondere il numero di riga nell'editor di testo.\\ \U, \RM
\item[A27] Deve essere possibile configurare delle combinazioni veloci da tastiera (shortcuts) con cui accedere velocemente alle funzionalità principali del software.\\ \U, \DR
\item[A28] Deve essere possibile definire l'unità di indentazione sia come simbolo contenuto nel documento xml, sia come effettiva spaziatura nell'editor.\\ \U, \DR
\item[A29] Deve essere possibile configurare l'evidenziazione della riga corrente sia in termini di colorazioni che di grandezza e font del testo.\\ \U, \RM
\item[A30] Il software deve essere multipiattaforma, ossia deve essere possibile installarlo e usufruire delle stesse funzionalità su diversi sistemi operativi, tra cui GNU/Linux, Windows e Mac OS.\\ \OS, \RM
\item[A31] Deve essere possibile scrivere xpath e xquery \textit{al volo} (ossia senza salvarli su file) ed eseguirli su file xml presenti nel proprio file system.\\ \Q, \MR
\item[A32] Il software deve essere strutturato in maniera modulare, in modo che sia resa più semplice la suddivisione dei compiti, l'estensibilità e la manutenibilità.\\ \M, \X, \rIV
\item[A33] Il software deve prevedere la possibilità di poter essere esteso, in tutte le sue parti, traminte \textit{plug-in}, in particolare va presa in considerazione la possibilità di sviluppare i requisiti opzionali e desiderabili mediante \textit{plug-in}.\\ \X, \rIV
\item[A34] Il software deve cercare di applicare le modifiche alle impostazioni a runtime. Se non ci riesce deve notificare all'utente la necessità di un riavvio del software per rendere effettive le modifiche.\\ \U, \MR
\item[A35] Nel caso di apertura di un file è necessario controllare che il file in questione sia tra i tipi supportati dal software. In caso non lo sia va notificato all'utente in modo opportuno.\\ \F, \U, \UC
\item[A36] Alla creazione di un nuovo file, il software deve chiedere all'utente se desidera salvare subito il file creato o salvarlo in un secondo momento.\\ \F, \U, \UC
\item[A37] Se un file appena creato non viene salvato al momento della creazione (vedi A36) il software deve cercare di individuare il linguaggio utilizzato e di conseguenza fornire in automatico tutti gli strumenti specifici per quel linguaggio.\\ \F, \U, \UC
\item[A38] Deve essere possibile la creazione, salvataggio e modifica di progetti. Un progetto è un insieme di file (anche di diversi linguaggi) non necessariamente correlati tra loro. Il raggruppamento di tali file è a totale discrezione dell'utente.\\ \U, \UC
\item[A39] Deve essere disponibile un buffer limitato contenente le ultime modifiche apportate al documento. Tale funzione \textit{undo} deve essere attivabile mediante la combinazione \textit{Ctrl+z} o mediante opportuni bottoni grafici, e deve riportare il documento esattamente a come era prima dell'ultima modifica apportata.\\ \F, \U, \MR
\item[A40] Deve essere possibile per l'utente definire la grandezza del buffer delle modifiche, restando comunque entro dei limiti fissati.\\ \U, \MR
\item[A41] La struttura dell'IDE deve essere concettualmente e fisicamente separata dal \textit{processore} (che gestisce xml, dtd, xml schema, xquery, xslt, xpath). Deve essere possibile per l'utente utilizzare un qualsiasi processore offerto dal mercato, sostituendolo a quello utilizzato di default.\\ \X, \M, \rIV
\end{itemize}

\section{Opzionali}
\begin{itemize}
\item[B1] Deve essere presente un controllo a runtime della sintassi per ogni linguaggio supportato.\\ \U, \RM
\item[B2] Deve essere possibile modificare i colori utilizzati per l'evidenziazione di sintassi.\\ \U, \DR
\item[B3] Deve essere possibile modificare il colore del testo indipendentemente dal colore di sfondo per ogni singolo elemento sintattico (stringa, keyword, simbolo, numero, carattere).\\ \U, \DR
\item[B4] Deve essere possibile modificare gli attributi del testo per ogni singolo elemento sintattico, ossia deve essere possibile decidere di visualizzare le keyword in grassetto e le stringhe in corsivo e le cifre sottolineate.\\ \U, \DR
\item[B5] Deve essere possibile modificare il font utilizzato nel testo scegliendo tra i vari font disponibili nel proprio sistema operativo.\\ \U, \DR
\item[B6] Deve essere possibile modificare la grandezza del testo utilizzato nell'editor di testo.\\ \U, \DR
\item[B7] Deve essere possibile utilizzare una scorciatoia da tastiera per evidenziare delle righe come \textit{segnalibri}, utile se ci si vuole segnare una riga che andrà modificata in futuro.\\ \U, \DR
\item[B8] Deve essere possibile definire una colorazione di sfondo per le righe segnalibro o alternativamente un immagine da affiancare alla riga evidenziata.\\ \U, \DR
\item[B9] Deve essere possibile definire un colore di default per lo sfondo del testo.\\ \U, \DR
\item[B10] Deve essere possibile abilitare un alternanza di colori per le righe ottenendo il secondo colore modificando la luminosità del primo.\\ \U, \RM
\item[B11] Deve essere possibile definire la versione della codifica del linguaggio (xml, xquery, xslt) utilizzato di default. Tale codifica dovrà inoltre essere utilizzate come codifica di default per i file creati in futuro.\\ \F, \U, \MR
\item[B12] Deve essere possibile decidere tra diversi algoritmi nella costruzione dei suggerimenti per l'autocompletamento generico (senza xml schema o dtd).\\ \X, \U, \MR
\item[B13] Il software deve essere disponibile in diverse lingue (inglese, italiano, spagnolo, tedesco).\\ \Q, \RM
\item[B14] Deve essere presente un controllo a runtime della correttezza del documento xml basandosi sull'xml schema o dtd associato (se presente).\\ \F, \U, \RM
\item[B15] Deve essere presente una funzione di autoindentazione. Dato un documento xml non indentato o non completamente indentato, deve indentarlo correttamente secondo quanto deciso nella configurazione di indentazione dell'editor.\\ \U, \RM
\item[B16] Il software deve a fronte di un \textit{acapo} calcolare l'indentazione giusta per la riga successiva.\\ \F, \U, \DR
\item[B17] Deve essere possibile disabilitare l'indentazione automatica a fronte di un \textit{acapo}.\\ \U, \DR
\item[B18] Deve essere possibile abilitare o disabilitare il controllo runtime degli errori.\\ \U, \RM
\item[B19] Il software deve avere un rudimentale sistema di tracciamento interno che segni orari e date ed azioni eseguite in una cronologia.\\ \U, \DR
\item[B20] Deve essere possibile decidere quali aspetti monitorare col sistema di log, ossia di quali eventi tenere traccia.\\ \U, \RM
\item[B21] Deve essere possibile decidere per quanti giorni (o per quanti eventi) deve tenere traccia la cronologia del log .\\ \U, \RM
\item[B22] Il software deve garantire un controllo sull'xml schema o sul dtd \textit{schema-awareness}, durante l'utilizzo di xquery e xslt. Il risultato di una xquery o di un xslt deve essere ottenuto controllando e acquisendo informazioni aggiuntive nell'xml schema o nel dtd.\\ \U, \RA
\item[B23] Deve essere presente una modalità di \textit{visualizzazione nodi} in conseguenza all'esecuzione di una xquery (o alla visualizzazione di un xslt), che utilizzi un grafico a nodi per rappresentare il risultato della query (o dell'xslt).\\ \U, \MR
\item[B24] Deve essere presente una modalità \textit{preview} che permetta di visualizzare uno \textit{stylesheet xslt} come se fosse visualizzato nel browser.\\ \U, \MR
\end{itemize}

\section{Desiderabili}
\begin{itemize}
\item[C1] Deve essere possibile abilitare una modalità aggiuntiva di colorazione nel codice tale da permettere una migliore lettura dell'xml calibrando la colorazione del testo e dello sfondo in base a quanto un elemento è annidato. Ciò permette di percepire l'indentazione in base al colore e non in base allo spazio in questo modo la spaziatura di indentazione può essere  ridotta in modo drastico consentendo all'utente di avere una piena visione anche di documenti pesantemente annidati.\\ \U, \RM
\item[C2] Deve essere possibile abilitare una colorazione automatica per gli sfondi. Una volta deciso il colore del testo il colore dello sfondo viene calcolato di conseguenza mantenendo la stessa tonalità e variando la luminosità.\\ \U, \DR
\item[C3] Deve essere possibile abilitare una modalità di indentazione intelligente.\\ \U, \DR
\item[C4] Il testo dell'editor deve utilizzare l'antialias per una migliore lettura.\\ \U, \DR
\item[C5] Efficienza nei controlli runtime e nei suggerimenti di autocompletamento.\\ \E, \DR
\item[C6] Supporto di \textit{xsl-fo}. Deve perciò essere possibile aprire, modificare e salvare file di questo tipo. Deve essere inoltre presente un evidenziazione di sintassi per questi file e in generale (quando ciò ha senso) per ogni funzionalità dell'IDE deve essere sviluppato un adattamento di quella funzionalità a questo linguaggio.\\ \F, \RM
\item[C7] Devono essere disponibili delle maschere grafiche in forma di wizard che aiutino a costruire documenti xml (e altri) in modo più semplice rispetto alla scrittura diretta del codice.\\ \U, \RM
\item[C8] Deve essere possibile scegliere tra più browser (tra quelli installati, o tra una serie di browser interni) quando si richiede di visualizzare un xslt in modalità \textit{preview} (B24).\\ \U, \MR
\end{itemize}
